// **************************************************************
// COPYRIGHT(c)2010, xidian University
// All rights reserved.
//
// IP LIB INDEX  :  HiNOC
// IP Name       :  HiNOC
// File name     :  read_ctrl.v
// Module name   :  CPT_READ_CTRL
// Full name     :  CPTURE READ CONTRL
//
// Author        :  Pan Weitao
// Email         :  panweitao@163.com
// Data          :  2010年10月8日9:54:26
// Version       :  V 1.0
//
// Abstract      :
// Called by     :  CPT_CTRL
//
// Modification history
// ------------------------------------------------------------------------------------------------------
// //
// $Log$
//
// *********************************************************************
`include    "top_define.v"
// *****************************
//  DEFINE MODULE PORT  //
// ******************************
module CPT_READ_CTRL_NEW(
             //input
             clk                      ,
             rst_n                    ,
             //dpram_data_o             ,

             //rd_info,
			 
			 //connect cpu
             rd_rdy                   ,
             rd_end                   , 		 	 
		
			 //connect info
			 cpt_info_fifo_empty      ,
             cpt_info_fifo_ren        ,
             cpt_info_fifo_rdata      ,

			 //connect write_ctrl
             cpt_rd_frame_len         ,
			 rd_end_posff1            ,
			 
			 cpt_start_en

           );
 
// ******************************
// DEFINE INPUT
// ******************************         
input          clk                    ;
input          rst_n                  ;      

input          rd_rdy                 ;
input          rd_end                 ;


// ******************************
// DEFINE OUTPUT  //
// ******************************      

input          cpt_info_fifo_empty    ;
output         cpt_info_fifo_ren      ;
input  [10:0]  cpt_info_fifo_rdata    ;

output		   rd_end_posff1          ;

output reg [10:0]  cpt_rd_frame_len;
output reg cpt_start_en ;

// ******************************
// OUTPUT ATRRIBUTE  //
// ******************************                                   

//WIRES


// ******************************
// INTERNAL ATRRIBUTE  //
// ******************************                                   
//REGS

wire        rdy_pos        ;
reg         rdy_ff1        ;
reg         rdy_ff2        ;
reg         rd_end_ff1     ;
reg         rd_end_posff1     ;
wire        rd_end_pos     ;

//WIRES

// ******************************
//MAIN CODE  //
// ******************************

assign cpt_info_fifo_ren = rdy_pos&&(!cpt_info_fifo_empty);
// generate cpt_fifo_status signal, to show the number of valid frames  

//*******************************7.4
always @ (posedge clk or negedge rst_n)
begin
    if(rst_n==1'b0)
        cpt_start_en <= 1'b0 ;
    else if ( cpt_info_fifo_ren == 1'b1 )
        cpt_start_en <= 1'b1 ;
	else if ( rd_end == 1'b1 )
		cpt_start_en <= 1'b0 ;
	else 
		cpt_start_en <= cpt_start_en ;
end
//********************************

always @ (posedge clk or negedge rst_n)
begin
    if(rst_n==1'b0)
        cpt_rd_frame_len <= 11'b0;
    else
        cpt_rd_frame_len <= cpt_info_fifo_rdata;
end
//********************************

always @ (posedge clk or negedge rst_n)
begin
    if(rst_n==1'b0)
	    begin
            rdy_ff1 <= 1'b0;
	    rdy_ff2 <= 1'b0;
            rd_end_ff1  <= 1'b0;
            rd_end_posff1 <= 1'b0;				
	    end		
    else
	    begin
            rdy_ff1 <= rd_rdy;
	    rdy_ff2 <=   rdy_ff1;	
            rd_end_ff1  <= rd_end;	
            rd_end_posff1 <= rd_end_pos;
	    end		
end

 assign rdy_pos = rdy_ff1 & (~rdy_ff2);
assign rd_end_pos = rd_end & (~rd_end_ff1);

endmodule



        
